home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C++ / Applications / PICSee Dust 1.01 / Quaternary Source / CP_Utils.h < prev    next >
Text File  |  1995-11-24  |  2KB  |  73 lines

  1. #ifndef CP_UTILS_H_
  2. #define CP_UTILS_H_
  3.  
  4. #ifndef CP_DATA_H_
  5. #include "CP_Data.h"
  6. #endif
  7.  
  8. // ---------------------------------------------------------------------------
  9.  
  10. #ifdef __cplusplus
  11. extern "C" {
  12. #endif
  13.  
  14. void CP_SetRect(CP_Rect *destR, CP_Long left, CP_Long top, CP_Long right, CP_Long bottom);
  15. void CP_OffsetRect(CP_Rect *destR, CP_Long offsetH, CP_Long offsetV);
  16. void CP_UnionRect(const CP_Rect *rectA, const CP_Rect *rectB, CP_Rect *unionR);
  17. void CP_CenterRect(CP_Rect *innerRect, const CP_Rect *outerRect);
  18. void CP_MoveRectTo(CP_Rect *theRect, CP_Long destLeft, CP_Long destTop);
  19.  
  20. void CP_OffsetPoint(CP_Point *pt, CP_Long offsetH, CP_Long offsetV);
  21. short CP_PointInRect(const CP_Point *pt, const CP_Rect *rect);
  22.  
  23. #ifdef __cplusplus
  24. }
  25. #endif
  26.  
  27. // ---------------------------------------------------------------------------
  28.  
  29. /*
  30.     Some useful (and others not so useful) #defines...
  31. */
  32.  
  33. #define CP_MIN(a, b) ((a) < (b) ? (a) : (b))
  34. #define CP_MAX(a, b) ((a) > (b) ? (a) : (b))
  35.  
  36. // ---------------------------------------------------------------------------
  37.  
  38. /*
  39.     Use FastOffsetRect instead of CP_OffsetRect; this is slightly
  40.     faster (it doesn't incur the overhead of a function call).
  41.     This macro, and the ones like it below, will however
  42.     bloat your code slightly.
  43.     Unlike CP_OffsetRect, don't "pass" the address of the rect;
  44.     pass the rect itself...
  45. */
  46. #define FastOffsetRect(r, x, y)    \
  47.     r.top += y;                    \
  48.     r.left += x;                \
  49.     r.bottom += y;                \
  50.     r.right += x
  51.  
  52. // ---------------------------------------------------------------------------
  53.  
  54. /*
  55.     Again, like FastOffsetRect, use this for
  56.     speedier results. Slightly better than
  57.     UnionRect.
  58. */
  59. #define FastUnionRect(s, d, u)                \
  60.     u.top    = CP_MIN(s.top, d.top);        \
  61.     u.left   = CP_MIN(s.left, d.left);        \
  62.     u.bottom = CP_MAX(s.bottom, d.bottom);    \
  63.     u.right  = CP_MAX(s.right, d.right)
  64.  
  65. // ---------------------------------------------------------------------------
  66.  
  67. #define FastOffsetPt(pt, x, y)    \
  68.     (CP_Point)pt.hv.v += y;        \
  69.     (CP_Point)pt.hv.h += x
  70.  
  71. // ---------------------------------------------------------------------------
  72.  
  73. #endif // CP_UTILS_H_